package cn.xiaobai.core.domain.factory;

import cn.xiaobai.core.domain.PluginConfig;
import org.springframework.beans.factory.FactoryBean;

import java.util.List;

/**
 * 抽象工厂bean
 *
 * @Author yangdaji
 * @Date 2023/12/10
 * @PackageName cn.xiaobai.core.domain
 * @ClassName ToolFactoryBean
 */
public abstract class ToolFactoryBean<T> implements FactoryBean<T> {


    @Override
    public T getObject() throws Exception {
        return getInstance();
    }

    @Override
    public Class<?> getObjectType() {
        return getInstanceType();
    }

    /**
     * 获取该工厂可以提供的模块具体类型
     *
     * @return
     */
    public abstract String getType();

    /**
     * 获取该工厂可以提供的模块功能描述
     *
     * @return
     */
    public abstract String getDescription();

    /**
     * 获取该工厂可以提供的模块的配置项
     *
     * @return 所有的配置项字符串
     */
    public abstract List<PluginConfig> getPluginConfig();

    public abstract T getInstance();


    public abstract Class<?> getInstanceType();

}
